#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

int count = 0;

void handler(int signo)
{
  printf("catch a signal : %d\n", signo);
}

int main(int argc, char *argv[])
{
  // 硬件条件
  // MMU硬件产生异常，内核将这个异常处理为SIGSEGV信号发送给进程
  //signal(11, handler);
  int* p = NULL;
  printf("%d\n", *p);
  // CPU运算单元产生异常，内核将这个异常处理为SIGFPE信号发送给进程
  //signal(8, handler);
  //int a = 10;
  //int b = 0;
  //printf("%d", a/b); 
  //由软件条件产生信号  
  //alarm函数和SIGPIPE signal(14, handler); alarm(1); while (1){ count++; } alarm(1); while (1){ printf("count:%d\n", ++count); } 系统函数向进程发送信号 signal(6, handler); while (1){ abort(); } signal(2, handler); while (1){ raise(2); sleep(1); } signal(9, handler); if (argc == 3){
  //  // 给指定的进程发送指定的信号
  //  kill(atoi(argv[1]), atoi(argv[2]));
  //}
  // 注册一个对特定信号处理的动作或者说注册对一个信号的捕捉方式
  //signal(2, SIG_IGN);
  //while(1){
  //  printf("I am a process, I am running...\n");
  //  sleep(1);
  //}
  //while (1){
  //  printf("I am a process,I am waitting signal\n");
  //  sleep(1);
  //}
  return 0;
}
